import { watch } from 'vue';

import { useAccessStore } from '@vben/stores';

import { requestClient } from '#/api/request';

// 获取徽标配置的API
export async function getBadgeConfig() {
  return requestClient.post<any>(
    '/badgeConfig',
    {},
    {
      responseReturn: 'body',
    },
  );
}

// 定时更新徽标数据的函数
let badgeUpdateTimer: null | number = null;

/**
 * 开始定时更新徽标数据
 * @param interval 更新间隔(毫秒)，默认5分钟
 */
export function startBadgeUpdate(interval: number = 5 * 60 * 1000) {
  // 先执行一次更新
  updateBadges();

  // 设置定时器
  if (badgeUpdateTimer) {
    clearInterval(badgeUpdateTimer);
  }

  badgeUpdateTimer = window.setInterval(() => {
    updateBadges();
  }, interval);
}

/**
 * 停止定时更新徽标数据
 */
export function stopBadgeUpdate() {
  if (badgeUpdateTimer) {
    clearInterval(badgeUpdateTimer);
    badgeUpdateTimer = null;
  }
}

/**
 * 更新徽标数据
 */
export async function updateBadges() {
  try {
    const accessStore = useAccessStore();
    if (accessStore.$state.accessMenus.length === 0) {
      watch(
        () => accessStore.$state.accessMenus,
        () => {
          if (accessStore.$state.accessMenus.length > 0) {
            updateBadges();
          }
        },
      );
    }
    // 获取徽标配置
    const response = await getBadgeConfig();
    const badgeConfigs = response?.data;

    if (Array.isArray(badgeConfigs)) {
      // 遍历所有徽标配置并更新菜单
      badgeConfigs.forEach((config) => {
        const menu = accessStore.getMenuByPath(config.menuCode);
        if (menu) {
          menu.badge = config.badge;
          menu.badgeType = config.badgeType;
          menu.badgeVariants = config.badgeVariants;
        }
      });
    }
  } catch (error) {
    console.error('获取徽标配置失败:', error);
  }
}

/**
 * 更新单个菜单的徽标
 * @param menuPath 菜单路径
 */
export function updateMenuBadge(menuPath: string) {
  const accessStore = useAccessStore();
  const menu = accessStore.getMenuByPath(menuPath);

  if (menu) {
    getBadgeConfig()
      .then((response) => {
        const badgeConfigs = response?.data || [];
        if (Array.isArray(badgeConfigs)) {
          const config = badgeConfigs.find(
            (item) => item.menuCode === menuPath,
          );
          if (config) {
            menu.badge = config.badge;
            menu.badgeType = config.badgeType;
            menu.badgeVariants = config.badgeVariants;
          }
        }
      })
      .catch((error) => {
        console.error('获取徽标配置失败:', error);
      });
  }
}
